
// vuex 数据管理模块

export default {
  
  namespaced: true,
  
  // 数据容器
  state: () => ({
    // 购物车数据容器
    cart: JSON.parse( uni.getStorageSync('cart') || '[]' ), // 从本地存储读取
  }),
  
  // 定义操作state的方法
  mutations: {
    // 修改购物车数据的方法
    addCart(state, goods){
      // 查找商品是否添加过
      const result = state.cart.find(item => item.goods_id === goods.goods_id)
      if(result){
        result.goods_count += 1
      }else {
        state.cart.push(goods)
      }
      
      // 持久化存储
      this.commit('m_cart/saveToStorage')
      
      console.log(JSON.stringify(state.cart))
    },
    
    // 更新购物车商品的选中状态
    updateGoodsState(state, goods){
      // 获取你要更新商品
      const result = state.cart.find(item => item.goods_id === goods.goods_id)
      // 更新 商品的选中状态
      if(result){
        result.goods_state = !goods.goods_state
      }
      // 持久化存储
      this.commit('m_cart/saveToStorage')
    },
    
    // 更新购物车商品的数量
    updateGoodsCount(state, goods){
      // 获取你要更新商品
      const result = state.cart.find(item => item.goods_id === goods.goods_id)
      // 更新商品的数量
      if(result){
        result.goods_count = goods.goods_count
      }
      // 持久化存储
      this.commit('m_cart/saveToStorage')
    },
    
    // 更新购物车商品的全部选中状态
    updateAllGoodsState(state, selected){
      // 更新商品的全部选中状态
      state.cart.forEach(item => item.goods_state = selected)
      // // 持久化存储
      this.commit('m_cart/saveToStorage')
    },
    
    // 本地保存购物车数据
    saveToStorage(state){
      uni.setStorageSync('cart', JSON.stringify(state.cart)) 
    }
    
  },
  
  // getters属性
  getters: {
    // 计算购物车中的产品数量
    total(state){
      // 累加购物车中商品数量
      return state.cart.reduce((acc, curr) => acc + curr.goods_count , 0)
    },
    // 计算购物车产品的选中状态
    isAllCheck(state){
      return state.cart.every(item => item.goods_state)
    },
    // 计算购物车中勾选了的产品的总价
    totalPrice(state){
      return state.cart.filter(item => item.goods_state)
                       .reduce((acc, curr) => acc + (curr.goods_count*curr.goods_price), 0)
                       .toFixed(2)
    },
    // 选中（结算）的商品的总数量
    checkedAmount(state){
    return  state.cart.filter(item => item.goods_state)
                      .reduce((acc, curr) => acc + curr.goods_count, 0)
    }
  }
  
  
}